package com.shenshen.Unit;

import java.util.Calendar;
import java.util.Date;



public class DateUtil {

	final static long MILLIONSPERMINUTE = 1000 * 60;// 一分钟有多少毫秒

	/**
	 * 功能：根据生日计算年龄 示例：现在是2020-4-23，如果生日是2020-5-20，那结果是19
	 * 
	 * 
	 */

	public static int getAge(Date birthday) {

		if (birthday == null)
			return 0;

		// TODO 实现代码
		// 得到今天的日期
		Date today = new Date();

		// 出生的年月日
		int bYear = birthday.getYear();
		int bMonth = birthday.getMonth();
		int bDay = birthday.getDate();

		// 今天的年月日
		int tYear = today.getYear();
		int tMonth = today.getMonth();
		int tDay = today.getDate();

		int age = tYear - bYear;
		// 如果今天的月份小
		if (tMonth < bMonth) {
			age--;
		} else if (tMonth == bMonth) {
			// 月份相同但是日期小 年龄减1
			if (tDay < bDay)
				age--;
		}
		return age;

	}

	/*
	 * * 功能：给定时间对象，获取该时间的月初1日0时0分0秒0毫秒
	 */
	public static Date getFirstDayOfMonth(Date src) {

		Calendar calendar = Calendar.getInstance();
		calendar.setTime(src);

		calendar.set(Calendar.MILLISECOND, 0);
		// 时分秒都设置成0 天设置成1
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.AM_PM, Calendar.AM); // 上午
		calendar.set(Calendar.MINUTE, 0); // 分钟
		calendar.set(Calendar.HOUR, 0); // 小时
		calendar.set(Calendar.DATE, 1); // 天

		return calendar.getTime();

		// TODO 实现代码
	}

	/*
	 * * 功能：获取人性化时间，例如5分钟之内则显示“刚刚”，其它显示16分钟前、2小时前、3天前、4月前、5年前等
	 *
	 */
	public static String getDisplayTime(Date date) {
		// TODO 实现代码
		long current = new Date().getTime();
		long pre = date.getTime();
		long minutes = (current - pre) / MILLIONSPERMINUTE;
		if (minutes <= 5) {
			return "刚刚";
		}

		if (minutes < 60) {
			return minutes + "分钟之前";
		}

		if (minutes / 60 < 24) {
			return minutes / 60 + "小时之前";
		}

		int days = (int) minutes / 60 / 24;
		if (days < 30)
			return days + "天之前";

		if (days < 365) {
			return days / 30 + "月之前";
		}

		return days / 365 + "年之前";

	}

	/*
	 * * 功能：给定时间对象，获取该时间的月末最后一天的23时23分59秒999毫秒
	 */
	public static Date getLastDayOfMonth(Date src) {

		// TODO 实现代码
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(src);

		calendar.add(Calendar.MONTH, 1);// 月份加一
		calendar.set(Calendar.MILLISECOND, 0);
		// 时分秒都设置成0 天设置成1
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.AM_PM, Calendar.AM); // 上午
		calendar.set(Calendar.MINUTE, 0); // 分钟
		calendar.set(Calendar.HOUR, 0); // 小时
		calendar.set(Calendar.DATE, 1); // 天
		// 以上代码已经得到下个月的月初了
		////////////// 下一个月月初减去一秒就是这个月的月末 ///////////////
		calendar.add(Calendar.SECOND, -1);

		return calendar.getTime();

		// TODO 实现代码
	}

	public static Date offsetDate(int days) {
		// TODO 实现代码
		// TODO 实现代码
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date());
		calendar.add(Calendar.DATE, days);
		return calendar.getTime();
	}

	/**
	 * 功能：获取当前季节，如春季、夏季、秋季、冬季。
	 * 
	 * @return Season 季节
	 */
	public static Season getCurrentSeason() {
		// TODO 实现代码
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date());
		int month = calendar.get(Calendar.MONTH);
		if (month < 3)
			return Season.Spring;

		if (month < 6)
			return Season.Summer;

		if (month < 9)
			return Season.Autumn;

		return Season.Winter;

	}

}
